#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>
using namespace std;
void test()
{
    const char *str = "1234";
    pid_t id = atoi(str);
    cout << id << endl;
}
void test1()
{
    while (true)
    {
        cout << "我是一个正在运行的进程, pid: " << getpid() << endl;
        sleep(1);
    }
}
void test2()
{
    int cnt = 0;
    while (cnt <= 10)
    {
        cout << "cnt : " << cnt++ << endl;
        sleep(1);
        if (cnt >= 5)
            // abort();
            // kill(getpid(),SIGABRT);
            // raise(3);
            kill(getpid(), SIGQUIT);
    }
}
void handler(int signo)
{
    cout << "获取到一个信号, 信号编号是 : " << signo << endl;
    sleep(1);
}
void test4()
{
    signal(SIGSEGV, handler);
    int *p = nullptr;
    *p = 100;
    while (true)
    {
        cout << "我在运行中...." << endl;
        sleep(1);
        // int* p = nullptr;
        // *p = 100;
    }
}
void test3()
{
    signal(SIGFPE, handler);
    int a = 10;
    a /= 0;
    while (true)
    {
        cout << "我在运行中...." << endl;
        sleep(1);
        // int a = 10;
        // a/=0;
    }
}
void test5()
{
    alarm(1);
    int cnt = 0;
    while(true)
    {
        cout<<"cnt : "<<cnt++<<endl;
    }
}
int cnt1 = 0;
void catchsigno(int signo)
{
    cout<<"获取到一个信号, 信号编号是: "<<cnt1<<endl;
}
void test6()
{
    signal(SIGALRM, catchsigno);
    alarm(10);
    sleep(11);
    int n = alarm(3);
    cout<<n<<endl;
    while(true)
    {
        cnt1++;
    }
}
int main()
{
    // test();
    // test1();
    // test2();
    // test3();
    // test4();
    // test5();
    // test6();
    return 0;
}